#ifndef IMAGEWINDOW_H
#define IMAGEWINDOW_H

#include <QWidget>
#include <QLabel>
#include <vector>
#include <deque>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;


namespace Ui {
class ImageWindow;
}

/**
 * @brief The ImageWindow class： 自定义label控件，可以显示多张图片，有按钮可以左右切换图片
 */
class ImageWindow : public QLabel
{
    Q_OBJECT
private:
    /**
     * @brief m_curIndex： 当前显示的图像索引
     */
    int m_curIndex = 0;
    /**
     * @brief m_capcity：控件所能显示的图像容量
     */
    int m_capcity = -1;

public:
    deque<cv::Mat> m_Imgs;

public:
    explicit ImageWindow(QWidget *parent = nullptr);
    ~ImageWindow();

    /**
     * @brief showImg：显示指定图像到控件上
     * @param index：要显示的图像索引
     */
    void showImg(int index);

    /**
     * @brief clearImgs：清除所有图像
     */
    void clearImgs();

    /**
     * @brief addImgs：增加一组图像，若超出容量，则会把队头的图像移除
     * @param imgs
     */
    void addImgs(deque<cv::Mat> imgs);

    /**
     * @brief addImg：增加单幅图像，若超出容量，则会把队头的图像移除
     * @param img
     */
    void addImg(cv::Mat img);

    /**
     * @brief hideBtn：隐藏图像翻页按钮与图像数量显示控件，用于只显示单幅图像时
     */
    void hideBtn();

    /**
     * @brief setCapcity：设置图像容量，-1则表示不限制容量
     * @param cap
     */
    void setCapcity(int cap);

signals:
    /**
     * @brief indexChange：当翻页或者增加图片时会发出这个信号，图像索引信息labIndex会改变
     */
    void indexChange();

private:
    Ui::ImageWindow *ui;
};

#endif // IMAGEWINDOW_H
